home *** CD-ROM | disk | FTP | other *** search
/ Freelog 125 / Freelog_MarsAvril2015_No125.iso / Musique / Quod Libet / quodlibet-3.3.0-portable.exe / quodlibet-3.3.0-portable / data / bin / quodlibet / qltk / tracknumbers.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2014-12-31  |  7KB  |  203 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.7)
  3.  
  4. from gi.repository import Gtk
  5. from quodlibet import qltk
  6. from quodlibet import util
  7. from quodlibet.qltk._editutils import OverwriteWarning, WriteFailedError
  8. from quodlibet.qltk.views import HintedTreeView, TreeViewColumn
  9. from quodlibet.qltk.wlw import WritingWindow
  10. from quodlibet.qltk.models import ObjectStore
  11. from quodlibet.util.path import fsdecode
  12. from quodlibet.util import connect_obj
  13.  
  14. class Entry(object):
  15.     
  16.     def __init__(self, song):
  17.         self.song = song
  18.         self.tracknumber = song('tracknumber')
  19.  
  20.     
  21.     def name(self):
  22.         return fsdecode(self.song('~basename'))
  23.  
  24.     name = property(name)
  25.  
  26.  
  27. class TrackNumbers(Gtk.VBox):
  28.     
  29.     def __init__(self, prop, library):
  30.         super(TrackNumbers, self).__init__(spacing = 6)
  31.         self.title = _('Track Numbers')
  32.         self.set_border_width(12)
  33.         hbox2 = Gtk.HBox(spacing = 12)
  34.         hbox_start = Gtk.HBox(spacing = 3)
  35.         label_start = Gtk.Label(label = _('Start fro_m:'))
  36.         label_start.set_use_underline(True)
  37.         spin_start = Gtk.SpinButton()
  38.         spin_start.set_range(0, 999)
  39.         spin_start.set_increments(1, 10)
  40.         spin_start.set_value(1)
  41.         label_start.set_mnemonic_widget(spin_start)
  42.         hbox_start.pack_start(label_start, True, True, 0)
  43.         hbox_start.pack_start(spin_start, True, True, 0)
  44.         hbox_total = Gtk.HBox(spacing = 3)
  45.         label_total = Gtk.Label(label = _('_Total tracks:'))
  46.         label_total.set_use_underline(True)
  47.         spin_total = Gtk.SpinButton()
  48.         spin_total.set_range(0, 999)
  49.         spin_total.set_increments(1, 10)
  50.         label_total.set_mnemonic_widget(spin_total)
  51.         hbox_total.pack_start(label_total, True, True, 0)
  52.         hbox_total.pack_start(spin_total, True, True, 0)
  53.         preview = qltk.Button(_('_Preview'), Gtk.STOCK_CONVERT)
  54.         hbox2.pack_start(hbox_start, True, False, 0)
  55.         hbox2.pack_start(hbox_total, True, False, 0)
  56.         hbox2.pack_start(preview, False, True, 0)
  57.         model = ObjectStore()
  58.         view = HintedTreeView(model = model)
  59.         self.pack_start(hbox2, False, True, 0)
  60.         render = Gtk.CellRendererText()
  61.         column = TreeViewColumn(_('File'), render)
  62.         column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
  63.         
  64.         def cell_data_file(column, cell, model, iter_, data):
  65.             entry = model.get_value(iter_)
  66.             cell.set_property('text', entry.name)
  67.  
  68.         column.set_cell_data_func(render, cell_data_file)
  69.         view.append_column(column)
  70.         render = Gtk.CellRendererText()
  71.         render.set_property('editable', True)
  72.         column = TreeViewColumn(_('Track'), render)
  73.         column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
  74.         
  75.         def cell_data_track(column, cell, model, iter_, data):
  76.             entry = model.get_value(iter_)
  77.             cell.set_property('text', entry.tracknumber)
  78.  
  79.         column.set_cell_data_func(render, cell_data_track)
  80.         view.append_column(column)
  81.         view.set_reorderable(True)
  82.         w = Gtk.ScrolledWindow()
  83.         w.set_shadow_type(Gtk.ShadowType.IN)
  84.         w.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
  85.         w.add(view)
  86.         self.pack_start(w, True, True, 0)
  87.         bbox = Gtk.HButtonBox()
  88.         bbox.set_spacing(6)
  89.         bbox.set_layout(Gtk.ButtonBoxStyle.END)
  90.         save = Gtk.Button(stock = Gtk.STOCK_SAVE)
  91.         self.save = save
  92.         connect_obj(save, 'clicked', self._TrackNumbers__save_files, prop, model, library)
  93.         revert = Gtk.Button(stock = Gtk.STOCK_REVERT_TO_SAVED)
  94.         self.revert = revert
  95.         bbox.pack_start(revert, True, True, 0)
  96.         bbox.pack_start(save, True, True, 0)
  97.         self.pack_start(bbox, False, True, 0)
  98.         preview_args = [
  99.             spin_start,
  100.             spin_total,
  101.             model,
  102.             save,
  103.             revert]
  104.         preview.connect('clicked', self._TrackNumbers__preview_tracks, *preview_args)
  105.         connect_obj(revert, 'clicked', self._TrackNumbers__update, None, *preview_args[1:])
  106.         spin_total.connect('value-changed', self._TrackNumbers__preview_tracks, *preview_args)
  107.         spin_start.connect('value-changed', self._TrackNumbers__preview_tracks, *preview_args)
  108.         connect_obj(view, 'drag-end', self.__class__._TrackNumbers__preview_tracks, self, *preview_args)
  109.         render.connect('edited', self._TrackNumbers__row_edited, model, preview, save)
  110.         connect_obj(prop, 'changed', self.__class__._TrackNumbers__update, self, spin_total, model, save, revert)
  111.         for child in self.get_children():
  112.             child.show_all()
  113.         
  114.  
  115.     
  116.     def __row_edited(self, render, path, new, model, preview, save):
  117.         row = model[path]
  118.         entry = row[0]
  119.         if entry.tracknumber != new:
  120.             entry.tracknumber = new
  121.             preview.set_sensitive(True)
  122.             save.set_sensitive(True)
  123.  
  124.     
  125.     def __save_files(self, parent, model, library):
  126.         win = WritingWindow(parent, len(model))
  127.         was_changed = set()
  128.         all_done = False
  129.         for entry in model.itervalues():
  130.             song = entry.song
  131.             track = entry.tracknumber
  132.             if song.get('tracknumber') == track:
  133.                 win.step()
  134.                 continue
  135.             if not song.valid():
  136.                 win.hide()
  137.                 dialog = OverwriteWarning(self, song)
  138.                 resp = dialog.run()
  139.                 win.show()
  140.                 if resp != OverwriteWarning.RESPONSE_SAVE:
  141.                     break
  142.                 
  143.             song['tracknumber'] = track
  144.             
  145.             try:
  146.                 song.write()
  147.             except:
  148.                 util.print_exc()
  149.                 WriteFailedError(self, song).run()
  150.                 library.reload(song, changed = was_changed)
  151.                 break
  152.  
  153.             was_changed.add(song)
  154.             if win.step():
  155.                 break
  156.                 continue
  157.             all_done = True
  158.             library.changed(was_changed)
  159.             win.destroy()
  160.             self.save.set_sensitive(not all_done)
  161.             self.revert.set_sensitive(not all_done)
  162.             return None
  163.  
  164.     
  165.     def __preview_tracks(self, ctx, start, total, model, save, revert):
  166.         start = start.get_value_as_int()
  167.         total = total.get_value_as_int()
  168.         for row in model:
  169.             if total:
  170.                 s = u'%d/%d' % (row.path.get_indices()[0] + start, total)
  171.             else:
  172.                 s = unicode(row.path.get_indices()[0] + start)
  173.             entry = row[0]
  174.             entry.tracknumber = s
  175.             model.row_changed(row.path, row.iter)
  176.         
  177.         save.set_sensitive(True)
  178.         revert.set_sensitive(True)
  179.  
  180.     
  181.     def __update(self, songs, total, model, save, revert):
  182.         if songs is None:
  183.             songs = [ e.song for e in model.itervalues() ]
  184.         else:
  185.             songs = list(songs)
  186.         songs.sort(key = (lambda song: (song('~#track'), song('~basename'), song)))
  187.         model.clear()
  188.         total.set_value(len(songs))
  189.         for song in songs:
  190.             if not song.can_change('tracknumber'):
  191.                 self.set_sensitive(False)
  192.                 break
  193.                 continue
  194.             self.set_sensitive(True)
  195.             for song in songs:
  196.                 model.append([
  197.                     Entry(song)])
  198.             
  199.         save.set_sensitive(False)
  200.         revert.set_sensitive(False)
  201.  
  202.  
  203.